package com.lishe.lishe.lishe.utils;

import android.content.Context;
import android.os.Environment;
import android.util.Log;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * Created by lwa on 2017/9/4.
 * 文件工具类
 */

public class FileUtils {
    public static final String LISHE_DIR=getSDPath()+"/Lishe/";

    //系统裁剪下来的图片名字
    public static final String CROP_HEAD_IMAGE_PATH ="crop_head.jpg";

    /**
     * 创建文件夹
     */
    public static File createDirFile(Context context, String path) {
        PermissionUtils.isStorageWritePermission(context);
        File file = new File(path);
        if (file.exists() && file.isDirectory()) {//文件存在并且是文件夹
            Log.e("文件已存在", "true");
            return file;
        } else {
            Log.e("文件bu存在", "true" + path);
//          file.mkdir();//只能在上一级文件夹存在的情况下，创建下一级文件夹
            file.mkdirs();//允许创建多级文件夹
            Log.e("文件bu存在", "true---" + file.exists());
            return file;
        }
    }

    /**
     * 是否替换
     *
     * @param path
     * @param isReplase
     */
    public static boolean createFile(Context context, String path, boolean isReplase) throws IOException {
        PermissionUtils.isStorageWritePermission(context);
        File file = new File(path);
        if (file.exists() && !file.isDirectory()) {//文件存在并且是文件
            if (isReplase) {
                file.createNewFile();//创建文件
                return true;
            }
            return true;
        } else {
            file.createNewFile();
            return true;
        }
    }


    /**
     * SD卡是否存在
     */
    public static boolean isSDcar() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获取SD卡根目录
     */
    public static String getSDPath() {
        if (isSDcar()) {//SD存在的判断
            return Environment.getExternalStorageDirectory().getAbsolutePath();
        }
        return null;
    }

    /**
     * @return
     */
    public static String fileToString(File file) {
        String str = null;
        StringBuilder sb = new StringBuilder();
        try {
            FileInputStream fis = new FileInputStream(file);
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            byte[] by = new byte[2048];
            int length = -1;
            while ((length = fis.read(by)) != -1) {
                sb.append(new String(by, 0, length));
            }
            while ((str = br.readLine()) != null) {
                sb.append(str + "/n");
            }
            fis.close();
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

    /**
     * 保存文件
     *
     * @param is
     * @param filePath
     * @param fileName
     * @return
     */
    public static boolean saveFile(InputStream is, File filePath, String fileName) {
        boolean isSuccess = false;
        FileOutputStream fos = null;
        BufferedInputStream bis = null;
        try {
            File file = new File(filePath, fileName);
            fos = new FileOutputStream(file);
            bis = new BufferedInputStream(is);
            byte[] buffer = new byte[1024];
            int len;
            while ((len = bis.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
                fos.flush();
            }
            isSuccess = true;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                    fos = null;
                }
                if (bis != null) {
                    bis.close();
                    bis = null;
                }
                if (is != null) {
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return isSuccess;
    }

    /**
     * 如果手机有SD卡，
     * 那么文件通过Context.getExternalFilesDir()方法保存到 SDCard/Android/data/你的应用的包名/files/ 目录
     * 如果手机没有SD卡，
     * 那么文件通过context.getFilesDir()方法把文件保存到 data/data/包名/files （该目录一般无法看到，只有手机Root之后可以用RE文件浏览器查看）目录
     * <p>
     * 文件保存到这个目录，应用被卸载后，与该应用相关的数据也清除掉
     *
     * @param context
     * @param type
     * @return
     */
    public static File getAPKExternalFilesDir(Context context, String type) {
        if (isSDcar()) {
            return context.getExternalFilesDir(type);
        } else {
            return context.getFilesDir();
        }
    }

    /**
     * 获取图片裁剪后的路径
     * @param context
     * @return
     */
    public static File getClipPhotoByPickPicturePath(Context context){
        return new File(getAPKExternalFilesDir(context, Environment.DIRECTORY_DCIM),FileUtils.CROP_HEAD_IMAGE_PATH);
    }

    /**
     * 获取 Lishe 文件夹
     * @return
     */
    public static File getLSDir(){
        File file=new File(LISHE_DIR);
        if(!file.exists()){
            file.mkdirs();
        }

        return new File(file,+System.currentTimeMillis()+".png");
    }
}
